voicemeeter\interface\parameters/
option.rs

1//! Option parameters
2use super::*;
3
4/// Option parameters for voicemeeter
5pub struct VoicemeeterOption<'a> {
6    remote: &'a VoicemeeterRemote,
7}
8
9impl<'a> VoicemeeterOption<'a> {
10    #[doc(hidden)]
11    pub fn new(remote: &'a VoicemeeterRemote) -> Self {
12        VoicemeeterOption { remote }
13    }
14
15    /// Get the identifier for an option: `Option.{dot}`
16    pub fn param(&self, dot: impl Display) -> Cow<'static, ParameterNameRef> {
17        // TODO: Should this maybe allow custom names?
18        Cow::Owned(format!("{VOICEMEETER_OPTION}.{dot}").into())
19    }
20    /// Preferred samplerate
21    ///
22    ///
23    /// Valid Samplerates |
24    /// ---
25    /// `44100.0`
26    /// `48000.0`
27    /// `88200.0`
28    /// `96000.0`
29    /// `176400.0`
30    /// `192000.0`
31    pub fn sr(&self) -> FloatParameter<'_> {
32        // FIXME: Enum parameter
33        FloatParameter::new_unranged(self.param("sr"), self.remote)
34    }
35    /// Samplerate for ASIO driver on output A1.
36    ///  Value | Description
37    ///   ---  |   ---
38    ///  `false` | default ASIO samplerate
39    ///  `true`  | preferred samplerate
40    pub fn asio_sr(&self) -> BoolParameter<'_> {
41        BoolParameter::new(self.param("ASIOsr"), self.remote)
42    }
43    /// BUS output delay
44    pub fn delay(&self, bus: usize) -> IntParameter<'_> {
45        IntParameter::new(self.param(format!("delay[{bus}]")), self.remote, 0..=500)
46    }
47    /// MME buffer size
48    pub fn buffer_mme(&self) -> IntParameter<'_> {
49        IntParameter::new(self.param("buffer.mme"), self.remote, 128..=2048)
50    }
51    /// WDM buffer size
52    pub fn buffer_wdm(&self) -> IntParameter<'_> {
53        IntParameter::new(self.param("buffer.wdm"), self.remote, 128..=2048)
54    }
55    /// KS buffer size
56    pub fn buffer_ks(&self) -> IntParameter<'_> {
57        IntParameter::new(self.param("buffer.ks"), self.remote, 128..=2048)
58    }
59    /// ASIO buffer size
60    pub fn buffer_asio(&self) -> IntParameter<'_> {
61        IntParameter::new(self.param("buffer.asio"), self.remote, 128..=2048)
62    }
63    /// WDM input exclusive
64    pub fn mode_exlusif(&self) -> BoolParameter<'_> {
65        BoolParameter::new(self.param("mode.exclusif"), self.remote)
66    }
67    /// WDM swift mode
68    pub fn mode_swift(&self) -> BoolParameter<'_> {
69        BoolParameter::new(self.param("mode.swift"), self.remote)
70    }
71    /// Option Monitor on SEL
72    pub fn monitor_on_sel(&self) -> BoolParameter<'_> {
73        BoolParameter::new(self.param("MonitorOnSEL"), self.remote)
74    }
75}